/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.di0.sql.insert;

import br.di0.sql.ConexaoPostgres;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Connection;
import java.sql.ResultSet;

/**
 *
 * @author di0
 */
public class InsertProdutos {

    public InsertProdutos() {
    }

    public static int inserir(String[] produto) {
        int rs = 0;
        String user = "1";

        //id_produto, descricao, unidade, id_Fornecedor, id_usuario, dat_inc
        String query = "INSERT INTO produto VALUES (DEFAULT," +
                "\'" + produto[1] + "\', \'" + produto[2] + "\'," +
                produto[3] + "," + user + ",(SELECT current_timestamp))";

        ConexaoPostgres postgres = new ConexaoPostgres();
        try {
            Connection conexao = postgres.setConexao();
            Statement stm = conexao.createStatement();

            int fornOK = validarFornecedor(produto[3], stm);
            int userOK = validarUsuario(user, stm);

            if (fornOK == 0) {
                if (userOK == 0) {
                    rs = stm.executeUpdate(query);
                    System.out.println("Resultado de " + query + ":\n\t" + rs);
                    String[] prod = new String[2];
                    prod[1] = "0";
                    ResultSet rss = stm.executeQuery("SELECT max(id_produto) FROM produto");
                    while (rss.next()) {
                        prod[0] = rss.getString("max");
                    }

                    InsertEstoque.inserir(prod);
                } else {
                    return userOK;
                }
            } else {
                return fornOK;
            }
        } catch (SQLException ex) {
            System.out.println("Erro ao tentar inserir");
            ex.printStackTrace();
        } finally {
            postgres.finalizaConexao();
        }
        return rs;
    }

    private static int validarFornecedor(String forn, Statement stm) {
        boolean fornOK = false;
        String validaForn = "SELECT * FROM fornecedor WHERE id_Fornecedor = \'" +
                forn + "\'";
        try {
            ResultSet result = stm.executeQuery(validaForn);
            while (result.next()) {
                fornOK = true;
                System.out.println("Fornecedor OK");
                return 0;
            }
            if (!fornOK) {
                System.out.println("Fornecedor NOK");
                return ERROR_FORN_NOT_FOUND;
            }
        } catch (SQLException ex) {
            System.out.println("Erro ao tentar validar Fornecedor");
            ex.printStackTrace();
        }
        return 0;
    }

    private static int validarUsuario(String user, Statement stm) {
        boolean userOK = false;
        String validaUser = "SELECT * FROM usuarios WHERE id_usuario = \'" +
                user + "\'";

        try {
            ResultSet result = stm.executeQuery(validaUser);
            while (result.next()) {
                userOK = true;
                System.out.println("Usuario OK");
                return 0;
            }
            if (!userOK) {
                System.out.println("Usuario NOK");
                return ERROR_USER_NOT_FOUND;
            }
        } catch (SQLException ex) {
            System.out.println("Erro ao tentar validar Usuário");
            ex.printStackTrace();
        }
        return 0;
    }

    public static int atualizar(String[] produto) {
        int rs = 0;
        String user = "1";

        String query = "UPDATE produto SET descricao = \'" + produto[1] + "\'," +
                " unidade = \'" + produto[2] + "\', id_Fornecedor = " + produto[3] +
                ", id_usuario = " + user +
                " WHERE id_produto = " + produto[0];

        String validacaoID = "SELECT * FROM produto WHERE id_produto = " +
                produto[0];

        try {
            ConexaoPostgres postgres = new ConexaoPostgres();
            Connection conexao = postgres.setConexao();
            Statement stm = conexao.createStatement();

            try {
                ResultSet result = stm.executeQuery(validacaoID);
                boolean idValido = false;
                while (result.next()) {
                    idValido = true;
                    break;
                }
                if (!idValido) {
                    System.out.println("Código [" + produto[0] + "] não encontrado");
                    return ERROR_ID_NOT_FOUND;
                }
            } catch (SQLException ex) {
                System.out.println("Erro ao tentar validar");
                ex.printStackTrace();
            }

            int fornOK = validarFornecedor(produto[3], stm);
            int userOK = validarUsuario(user, stm);

            if (fornOK == 0) {
                if (userOK == 0) {
                    rs = stm.executeUpdate(query); //ATUALIZAR
                    System.out.println("Resultado de " + query + ":\n\t" + rs);
                } else {
                    return userOK;
                }
            } else {
                return fornOK;
            }

        } catch (SQLException ex) {
            System.out.println("Erro ao tentar atualizar: " + query);
            ex.printStackTrace();
        }
        return rs;
    }

    public static String[] localizar(String id_produto) {
        String[] produto = null;
        String validacaoID = "SELECT * FROM produto WHERE id_produto = " +
                id_produto;
        try {
            ConexaoPostgres postgres = new ConexaoPostgres();
            Connection conexao = postgres.setConexao();
            Statement stm = conexao.createStatement();

            try {
                ResultSet result = stm.executeQuery(validacaoID);
                boolean idValido = false;
                produto = new String[4];
                while (result.next()) {
                    idValido = true;
                    produto[0] = result.getString("descricao");
                    produto[1] = result.getString("unidade");
                    produto[2] = result.getString("id_Fornecedor");
                    produto[3] = result.getString("dat_inc");
                    System.out.println("Produto [" + id_produto + " - " + produto[0] + "] encontrado");
                    break;
                }
                if (!idValido) {
                    System.out.println("Código [" + id_produto + "] não encontrado");
                    return null;
                }
            } catch (SQLException ex) {
                System.out.println("Erro ao tentar validar");
                ex.printStackTrace();
            }
        } catch (SQLException ex) {
            ex.printStackTrace();
        }

        return produto;
    }
    public static final int ERROR_USER_NOT_FOUND = -1;
    public static final int ERROR_FORN_NOT_FOUND = -2;
    public static final int ERROR_ID_NOT_FOUND = -3;

    /*
    public static void main(String args[]) {
    //System.out.println("Chamada manual para inserir no banco de dados \"Produto\"");
    //inserir("user", "passwd");
    //atualizar("4", "nomeAtualizado", "");
    }*/
}
